parser grammar XMLParser;

options {
  language = Java;
  tokenVocab = XMLLexer;
}

@header{
  package ejercicio5;
}

@members {
      //Lista que guarda los errores que se van produciendo durante el analisis lexico
    List<RecognitionException> errors = new ArrayList<RecognitionException>();

    //Metodo que devuelve la lista de errores que se han producido
    public List<RecognitionException> getAllErrors() {
        return errors;
    }
    
    //Metodo que comprueba si se han producido errores
    public boolean hasErrors() {
        return !errors.isEmpty();
    }

    //Metodo del analizador lexico sobrescrito para que los errores que se van
    //produciendo durante el analisis lexico en vez de mostrarse por consola
    //se guarden en la lista de errores (errors)
    @Override
    public void reportError(RecognitionException e) {
        errors.add(e);
    }
    //HashMap memory = new HashMap();
   // String buffer = "";
}


entrada: (elementos) EOF;

elementos : elemento+;

elemento returns[boolean coinciden]: APERTURA elementos CIERRE 
          { String etiqApertura = $APERTURA.text;
            String etiqCierre = $CIERRE.text;
            etiqApertura = etiqApertura.replace("<", ""); 
            etiqApertura = etiqApertura.replace(">", "");
            etiqCierre = etiqCierre.replace("</" , "");
            etiqCierre = etiqCierre.replace(">" , "");
            System.out.println("Etiqueta apertura: " +etiqApertura);
            System.out.println("Etiqueta cierre: " +etiqCierre);
            if(etiqApertura.equals(etiqCierre)){
              System.out.println("Las etiquetas coinciden");
              $coinciden = true;
             } 
            else{
             System.out.println("Las etiquetas no coinciden");
             $coinciden = false;
             }
             }
             
          | TEXTO; 